/**
 * @file csvlib.c
 * @author Linquan  
 * @brief 
 * @version 1.0
 * @date 2024-08-29
 * 
 * @copyright Copyright (c) 2024
 * @history:
 * 2024-8-29: 添加 CSV文件 指定一行的数据。解析获得的一行数据，并调用回调函数将一行数据中每列的数据进行处理。         
 */



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#include "csvlib.h"

/**
 * @brief Get the data from line object
 *      输入指定行，读取整行内容。
 *  注意：1、传入的缓冲区大小要足够，否则读取整行会失败。
 *       2、传入的文件指针会被重定位到文件开头，从头寻找
 * @param fp 
 * @param row_num 
 * @param data 
 * @param len 
 * @return int 
 */
int CSV_get_a_row_data(FILE *fp , int row_num, char* data, int len )
{
    if(fp == NULL) return -1;

    int n = row_num;

    rewind(fp);

    while (n)
    {
        n--;
        fgets(data, len, fp);        
    }
   
}




/**
 * @brief 解析读取的一行数据
 * 
 * @param row 
 * @param callback_func 将解析出来的数据，按照该行的索引，传入回调函数进行处理
 * @return int 传入指针为空，返回 -1
 */
int CSV_anaylise_colum_data_from_row(char  *row, row_anaylise_callback callback_func )
{
    char  *token;
    int column_index = 0;   /**> 列的索引 */

    if(row == NULL || callback_func == NULL)
    {
        return -1;
    }

    /**> 传入获得的一行的数据 */
     token = strtok(row, ","); 
        while (token != NULL) 
        {
            column_index++;

            /**> 获得该行的每个单元格数据，传入回调函数进行处理 */
            callback_func(column_index, token);
            token = strtok(NULL, ",");
        }
}





// /**
//  * @brief 小写字母转换大写字母
//  * 
//  * @param c 
//  * @return int 
//  */
// int to_upper(char c)
// {
//     if(c >= "a" && c <= "z" ) return (c - 32);
//     else return c;
// }
























